<?php			
	// Klass för att hantera inloggning av användare och testa funktionerna IsLoggedIn, DoLogin och DoLogout.
	class LoginHandler{
		private $m_sessionLocation = "LoginHandler::IsLoggedIn";
		// Funktion för att kontrollera om användaren är inloggad.
		public function IsLoggedIn(){
			return isset($_SESSION[$this->m_sessionLocation]);
		}
		// Funktion för att logga in. 
		public function DoLogin($username, $password){
			// Hårdkodade användare som ska matchas med användarens inmatning.				
			switch ($username)
			{
				case "Jack":
					if($password == "Black"){
						$_SESSION[$this->m_sessionLocation] = true;
						return true;
					}
				break;
				case "John":
					if($password == "Doe"){
						$_SESSION[$this->m_sessionLocation] = true;
						return true;					
					}
				break;		
				default:
					return false;	 
			}	
		}
		// Funktion för att logga ut.
		public function DoLogout(){
			if(isset($_SESSION[$this->m_sessionLocation])){
				unset($_SESSION[$this->m_sessionLocation]);
			}
		}
		// Funktion för att testa de tre funktionerna ovanför.
		public function Test(){
			// System under test.
			$sut = new LoginHandler();
			// Anropar DoLogout för att försätta användaren i utloggat läge.
			$sut->DoLogout();
			// Test av IsLoggedIn funktionen om användaren är utloggad.
			if($sut->IsLoggedIn() == true){
				echo "<br/>IsLoggedIn Test 1. Användaren bör vara utloggad.";
				return false;
			}
			// Test av DoLogin funktionen med felaktiga uppgifter.
			if($sut->DoLogin("Karl", "Gustaf") == true){
				echo "<br/>DoLogin Test 1. Användaren bör inte kunna logga in med fel uppgifter.";
				return false;
			}
			// Test av DoLogin funktionen med rätta uppgifter.
			if($sut->DoLogin("Jack", "Black") == false){
				echo "<br/>DoLogin Test 2. Användaren bör kunna logga in då uppgifterna stämmer.";
				return false;
			}
			// Test av IsLoggedIn funktionen om användaren är inloggad.
			if($sut->IsLoggedIn() == false){
				echo "<br/>IsLoggedIn Test 2. Användaren bör vara inloggad då uppgifterna stämmer.";
				return false;
			}
			// Test av IsLoggedout funktionen om användaren är utloggad.
			$sut->DoLogout();
			// Test av DoLogin funktionen med rätta användarnamn och fel lösenord.
			if($sut->DoLogin("Jack", "Hack") == true){
				echo "<br/>DoLogin Test 3. Användaren bör inte kunna logga in då lösenordet är fel.";
				return false;
			}
			if($sut->IsLoggedIn() == true){
				echo "<br/>Test av IsLoggedout. Användaren bör nu loggas ut.";
				return false;
			}
			// Alla tester lyckades.			
			return true;
		}
	}
?>